package modelo.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.bd.ConexionPool;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Usuario;

public class UsuarioDAO {

    private String query;

    protected List<Usuario> select() throws DAOException {
        Connection conexion = null;
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        List<Usuario> resultados = null;
        try {
            conexion = ConexionPool.getInstancia().getConexion();
            sentencia = conexion.prepareStatement(query);
            resultado = sentencia.executeQuery();
            resultados = new ArrayList<Usuario>();
            while (resultado.next()) {
                Usuario us = new Usuario();
                us.setClave(resultado.getString("login"));
                us.setContrasena(resultado.getString("contrasena"));
                us.setNombre(resultado.getString("nombre"));
                resultados.add(us);
            }
        } catch (SQLException ex) {
            throw new DAOException("Error USDS-SQL " + ex.getMessage());
        } finally {
            try {
                if (resultado != null) {
                    resultado.close();
                }
                if (sentencia != null) {
                    sentencia.close();
                }
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                throw new DAOException("Error USDS-SQL " + ex.getMessage());
            }
        }
        return resultados;
    }

    public List<Usuario> selectAll() throws DAOException {
        query = "SELECT uspe_clave    AS login, \n"
                + "       uspe_password AS contrasena, \n"
                + "       uspe_nombre   AS nombre \n"
                + "FROM   sil_usuarios_perfil \n"
                + "WHERE  uspe_tipo   = 'U' \n"
                + "AND    uspe_activo = 'S' \n"
                + "ORDER BY uspe_clave";
        return select();
    }

    public List<Usuario> selectWhere(String condition) throws DAOException {
        query = "SELECT uspe_clave    AS login, "
                + "       uspe_password AS contrasena, "
                + "       uspe_nombre   AS nombre "
                + "FROM   sil_usuarios_perfil "
                + "WHERE " + condition + " "
                + "AND   uspe_tipo   = 'U' "
                + "AND   uspe_activo = 'S'";
        return select();
    }
}
